<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="Y57iI" id="Y57iI"><span data-lake-id="u6ed29496" id="u6ed29496">典型回答</span></h1>
  <p data-lake-id="u0fca41bb" id="u0fca41bb"><br></p>
  <p data-lake-id="u7c58e4f1" id="u7c58e4f1"><span data-lake-id="ua6af3508" id="ua6af3508">要估算需要多少台机器来支持一个接口的QPS和RT，需要考虑多个因素，包括机器的性能、并发连接数、负载均衡、缓存等。</span></p>
  <p data-lake-id="udab2f6a3" id="udab2f6a3"><span data-lake-id="uf9b87073" id="uf9b87073">​</span><br></p>
  <p data-lake-id="u6f3544ba" id="u6f3544ba"><span data-lake-id="uc816ce0c" id="uc816ce0c">如果接口RT为200ms，那么我们可以计算直到，单台机器单个线程一秒钟的吞吐量：</span></p>
  <p data-lake-id="uc06b68c0" id="uc06b68c0"><span data-lake-id="u701e2ac8" id="u701e2ac8">​</span><br></p>
  <p data-lake-id="u8823a6ac" id="u8823a6ac"><span data-lake-id="uaec8dc94" id="uaec8dc94">单线程吞吐量 = 1000ms / RT </span></p>
  <p data-lake-id="u9f943d96" id="u9f943d96"><span data-lake-id="u0782b6e1" id="u0782b6e1">单线程吞吐量 = 1000ms / 200ms = 5请求/秒</span></p>
  <p data-lake-id="u6eb9e999" id="u6eb9e999"><span data-lake-id="uc015f37a" id="uc015f37a">​</span><br></p>
  <p data-lake-id="u4651db07" id="u4651db07"><span data-lake-id="u1f9d5ed1" id="u1f9d5ed1">这表示每台机器的每个线程每秒最多可以同时处理5个请求。</span></p>
  <p data-lake-id="ua0c8bf01" id="ua0c8bf01"><span data-lake-id="u7f1ff136" id="u7f1ff136">​</span><br></p>
  <p data-lake-id="u08f168c5" id="u08f168c5"><span data-lake-id="u4fa8a3b3" id="u4fa8a3b3">那么，假设我们的web服务器是tomcat，默认有200个线程，那么他一秒钟的吞吐量就要再乘以200：</span></p>
  <p data-lake-id="u5e1e2cd8" id="u5e1e2cd8"><span data-lake-id="ua3e4456c" id="ua3e4456c">​</span><br></p>
  <p data-lake-id="u8ea5f76a" id="u8ea5f76a"><span data-lake-id="u1140f5f8" id="u1140f5f8">单机吞吐量：5 * 200 = 1000</span></p>
  <p data-lake-id="u447ad85b" id="u447ad85b"><span data-lake-id="u0a2b4d45" id="u0a2b4d45">​</span><br></p>
  <p data-lake-id="uccbff9dd" id="uccbff9dd"><span data-lake-id="uedaef75b" id="uedaef75b">那么，根据这个吞吐量来计算的话，如果要抗3000的QPS，那么就需要：</span></p>
  <p data-lake-id="u94aac2c4" id="u94aac2c4"><span data-lake-id="u77fc28f7" id="u77fc28f7">​</span><br></p>
  <p data-lake-id="uf57b8c0c" id="uf57b8c0c"><span data-lake-id="u839d73e8" id="u839d73e8">3000/1000 = 3台机器。</span></p>
  <p data-lake-id="u5b9b2d97" id="u5b9b2d97"><br></p>
  <p data-lake-id="u6e5ceb93" id="u6e5ceb93"><span data-lake-id="u179f0fb5" id="u179f0fb5">但是，以上这个计算完全理想化了，完全忽略了CPU、内存、Load等硬件的情况。因为随着并发量的升高，应用的CPU、内存、磁盘等等各种硬件配置的使用情况也是在不断攀升的。</span></p>
  <p data-lake-id="u58d492cf" id="u58d492cf"><span data-lake-id="u25f5f00f" id="u25f5f00f">​</span><br></p>
  <p data-lake-id="u9fa77f92" id="u9fa77f92"><span data-lake-id="uec98bef7" id="uec98bef7">所以实际在预估的时候，需要在单机上进行压测，根据压测结果来预估需要多少台机器。</span></p>
  <p data-lake-id="u5ae556f2" id="u5ae556f2"><span data-lake-id="ua11306fa" id="ua11306fa">​</span><br></p>
  <p data-lake-id="ub50a1199" id="ub50a1199"><br></p>
  <p data-lake-id="u3ffdf451" id="u3ffdf451"><span data-lake-id="ua65e7c8b" id="ua65e7c8b">最理想的情况是需要3台机器，但是实际情况的话基本上会比这个要多一些，所以大致预估就是按照他的2-3倍来算的话，就是6-9台机器。</span></p>
 </body>
</html>